#ifndef _DISP_MANAGER_H // 防止重复包含
#define _DISP_MANAGER_H
 
#include "common.h"

#include "font_manager.h"

/**********************************************************************************************
* 变量命名规则
* 1.使用前缀区分变量的作用域
*   g_ 全局变量
*   m_ 类的数据成员（结构体成员）
*   s_ 模块内静态变量
*   空 局部变量不加前缀
* 2.使用小写的类型前缀区分变量的类型
*   i:int
*   f:float
*   d:double
*   c:char
*   uc:unsigned char
*   l:long
*   p:pointer
*   a:array(数组)
*   str:string(字符串)
*   t:结构类型
**********************************************************************************************/
typedef struct DispBuffer{
    int iXres;
    int iYres;
    int iBpp;
    char *buf;
}DispBuffer, *PDispBuffer;

 
typedef struct DispOpr{
/* 定义一个函数指针，要加括号与*号 */
    char *name;// 显示设备的名称
    int (*DeviceInit)(void);// 设备初始化
    int (*DeviceExit)(void);// 设备关闭
    int (*Getbuffer)(PDispBuffer ptDispBuffer);// 获取显示内容buf的函数
    int (*FlashRegion)(PRegion ptRegion , PDispBuffer ptDisBuff);
    /* 把buf的内容刷到指定的区域的函数，ptRegion表示一块区域，buffer表示要刷入的内容 */
    struct DispOpr *ptNext;// 链表，指向下一个显示设备
}DispOpr,*PDispOpr;
 
/*底层调用把lcd或者web注册进g_DispDevs形成一个链表*/
void RegisterDisplayer(PDispOpr ptDisOpr); 
 
/*初始化显示设备，把所有显示设备用上面的注册函数注册进g_DispDevs*/
void DisPlayInit(void);
 
/*根据名字选择显示设备*/
int SelectDefaultDisplay (char *name);
 
/*初始化选择好的显示设备，包括用ioctr获取信息，和getbuffer获取一块buffer*/
int InitDefaultDisplay (void);

PDispBuffer GetDispBuffer (void);

/*把得到的Framebuffer刷到选择好的显示设备上*/
int FlashDisplayRegion(PRegion ptRegion , PDispBuffer ptDisBuff);
 
/*描点函数，绘制一个点*/
int PutPixel (int x, int y, unsigned int dwColor);

void DrawFontBitmap(PFontBitmap ptFontBitmap , int dwColor);

void DrawRegion(PRegion ptRegion , int dwColor);

void DrawTextInRegionCentral(char *name , PRegion ptRegion , int dwColor);

#endif